# 使用场景:
# 1.当我们获取到的数据需要进行四则运算时,需要将数据转换为数值型(float, int)才能参与运算
# 2.比如我们想在数字之前加多个0, int float都不行,只能转换为str类型
# 3.不同中数据类型之间不能相加,所以也需要转换为同种数据类型才能相加(数值型(float,int,bool)都可以相加)


int1 = 10
float1 = 11.9999
str1 = '10'
str2 = '11.2'
str3 = 'abc'

# 常见的数据类型转换函数 int()  float() str()  eval()


# int ()
# float 转换为 int 类型, 可以转换成功，但是会将整数末尾所有的小数部分清除
print(int(float1)) # 11
print(type(int(float1))) # <class 'int'>


print('-------------------------------')
# str类型转换为 int 类型, 字符串内部必须是整型数据否则报错
print(int(str1)) # 10
print(type(int(str1)))  # <class 'int'>

# ValueError: invalid literal for int() with base 10: '11.2'
# print(int(str2))

# ValueError: invalid literal for int() with base 10: 'abc'
# print(int(str3))

print('------------------------------')
# float()
# int 类型转换为 float 类型, 可以转换成功，但是在数据末尾需要添加 .0
print(float(int1)) # 10.0
print(type(float(int1)))  # <class 'float'>

print('------------------------------')


# str类型转换为 float 类型, 如果引号内事整型或者浮点型数据则可以转换成功，否则失败
print(float(str1)) # 10.0
print(type(float(str1))) # <class 'float'>


print(float(str2)) # 11.2
print(type(float(str2))) # <class 'float'>

# ValueError: could not convert string to float: 'abc'
# print(float(str3)) # 11.2

print('------------------------------')


# str()
# 任何数据类型都可以转换成 str 数据类型
print(str(int1)) # 10
print(type(str(int1)))  # <class 'str'>
print(str(float1)) # 11.9999
print(type(str(float1))) # <class 'str'>


# eval()  去除字符串左右两侧的引号, 内部是什么就运行什么
str4 = '12'
print(eval(str4))  # 12
print(type(eval(str4))) # <class 'int'>


str5 = '12.6'
print(eval(str5))  # 12.6
print(type(eval(str5))) # <class 'float'>

str6 = 'False'
print(eval(str6))  # False
print(type(eval(str6))) # <class 'bool'>

# 解释： 将下方字符串左右两侧引号去除, 就是打印 hello world 的代码, 所以使用 eval 可以打印 hello world
eval("print('hello world')")  # hello world

# # NameError: name 'aaa' is not defined
# # 将 str7 左右两侧的引号去除，aaa 就是一个变量名， 但是变量名没有被定义所以会报错
# # 注意： 变量必须先定义再调用
# str7 = 'aaa'
# print(eval(str7))
# print(type(eval(str7)))






